package parsers;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;

public class ParserPruebaIEEEComputerSociety {

	/*
	 * Para el correcto funcionamiento debe descargarse el source code de la
	 * pagina despues de hacer la busqueda.
	 * 
	 * http://www.computer.org/csdl/proceedings/hicss/2013/4892/00/4892e826-abs.html
	 * http
	 * ://www.computer.org/csdl/proceedings/hicss/2013/4892/00/4892e826-reference
	 * .bib
	 */

	static int errores;

	public static void main(String[] args) {
		errores = 0;
		String bibContent = "";

		try {
			String finalHTML = "";
			File fil = new File("busquedasIEEECS/");
			System.out.println(fil.getAbsolutePath());
			File[] archivos = fil.listFiles(); // si se requiere filtrar usar
												// filenamefilter

			for (int iteracion = 0; iteracion < archivos.length; iteracion++) {

				finalHTML = cargarURL("file:///"
						+ archivos[iteracion].getAbsolutePath());
				// System.out.println(finalHTML);
				System.out.println("\narchivo con abstracts? : "
						+ finalHTML.contains("-abs.html"));
				System.out.println("-----------------------------");
				String[] xx = finalHTML.split("-abs.html");
				System.out.println("vinculos de la iteracion: "
						+ (iteracion + 1));

				String resumen = "";
				int cantidadArticulos = xx.length - 1;
				System.out.println("Procesando el numero:");
				for (int i = 0; i < cantidadArticulos; i++) {
					int indiceEtiqueta = xx[i].lastIndexOf("<");
					String vinculo = xx[i].substring(indiceEtiqueta + 9);
					try {
						String baseResumen = cargarURL("" + vinculo
								+ "-abs.html");
						String[] partes = baseResumen
								.split("<div class=\"abs-articlesummary\">");
						resumen = partes[1].substring(0,
								partes[1].indexOf("</div>"));
						resumen = resumen.replace("<p>", " ");
						resumen = resumen.replace("</p>", " ");
					} catch (Exception ex) {
						System.err.println("\nerror al obtener el abstract");
						System.err.println("\nerror: " + ex);
						errores++;
					}
					String vinculoBib = "" + vinculo + "-reference.bib";
					String result = cargarURL(vinculoBib);
					if (result != null) {
						result = result.replace(",}", ",abstract = {" + resumen
								+ "},}");
						bibContent += result + "\n";
					}
					System.out.print(" " + (i + 1));
				}

			}
			System.out.println("Proceso finalizado -----------------");
			System.out.println(bibContent);
			File f = new File("salidaLibreriaIEEECompuSociety.bib");
			FileWriter salida = new FileWriter(f);
			salida.write(bibContent);
			salida.flush();
			salida.close();
			System.out.println("Archivo Guardado -----------------");
			System.out.println("numero de errores: " + errores);
		} catch (IOException e2) {
			System.out.println(e2);
			e2.printStackTrace();
		} catch (Exception e) {
			System.err.println("\nerror en la ejecucion");
			System.out.println(e);
		}
	}

	public static String cargarURL(String dir) throws IOException, Exception {

		String strLine = "";
		String finalHTML = "";

		try {
			URL url = new URL(dir);
			URLConnection spoof;
			spoof = url.openConnection();
			// Spoof the connection so we look like a web browser
			spoof.setRequestProperty("User-Agent",
					"Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0;    H010818)");
			BufferedReader in;
			in = new BufferedReader(new InputStreamReader(
					spoof.getInputStream()));

			while ((strLine = in.readLine()) != null) {
				finalHTML += strLine;
			}
			in.close();
		} catch (Exception e) {
			System.err.println("\nAl cargar: " + e);
			return null;
		}
		// System.out.println("saliendo....");
		return finalHTML;
	}

}
